home *** CD-ROM | disk | FTP | other *** search
- /* #! sys:rexxc/rx **/
- /* $VER: aminetcdfind.cgi 1.0 (23.10.00) */
- /* Script für Suche auf einer AminetCD für Clarissa-HTTPd*/
- /* © Martin Kayser */
-
- /* Das Script sollte sowohl mit CD's aus den Set's als auch den einzelnen CD's
- ** funktionieren. (Ich habe jedoch keine CD aus den Set's!!!) */
-
- /* Dieses Script benötigt das Programm flashfind (V. 1.2) aus dem Aminet
- ** (util/cli/FlashFind1.2.lha) */
-
- /* Konfiguration */
-
- file='cd0:aminet/info/index/local'
- maxanzahl=100
- amineturl='/~aminet'
- flashfind='c:flashfind'
-
- /******************** Hauptprogramm ********************/
- say 'Content-type: text/html'
- say ''
-
- parse arg args
-
- args = translate(args,' ','+')
- args = translate(args,d2c(10),'&')
- args = hex2str(args)
-
- call cdname
-
- say '<HTML>'
- say '<HEAD>'
- say '<TITLE>Aminet searches</TITLE>'
- say '</HEAD>'
- say '<BODY>'
- if index(upper(cdname),'AMINET')~=0|index(upper(cdname),'SET')~=0 then do
- say '<H1>Aminetsuche auf der CDRom 'cdname'.</H1>'
- say 'Es ist leider nur die Angabe eines einzelnen Suchbegriffes möglich.<BR>'
- say 'Der Index wird nach den ersten 'maxanzahl' passenden Einträgen durchsucht.<BR>'
- say '<ISINDEX prompt="Geben Sie bitte einen Suchbegriff ein: ">'
- args = subword(args,1,1)
- if index(args,':')~=0 then parse var args args':'rest
- if index(args,'/')~=0 then parse var args args'/'rest
- if args ~='' then call scanner
- end
- else do
- say '<H1>Dienst momentan nicht verfügbar</H1>'
- say '<B>Grund:</B> Entweder liegt momentan keine Aminet-CD im CD-Laufwerk oder'
- say 'das CGI-Script auf dem Server wurde nicht richtig konfiguriert.'
- end
- say '</BODY>'
- say '</HTML>'
- exit
- /**** Prozeduren ****/
-
- scanner:
- if exists(file) & exists(flashfind) then do
- address command flashfind||' '||file||' '||args||' NH maxhit='||maxanzahl||' >T:find.'||args
- if open(1,'T:find.'args) then do
- say 'Für den Suchbegriff <B>´'args'´</B> wurden folgende'
- say 'Einträge gefunden.'
- say '<HR>'
- say '<table border=1>'
- say '<TR><TD><B>Name</B></TD><TD align=right><B>Verzeichnis</B></TD>'
- say '<TD align=right><B>Größe</B></TD><TD align=right><B>Alter</B></TD>'
- say '<TD><B>Beschreibung</B></TD></TR>'
- do while ~eof(1)
- s=readln(1)
- if s~='' & left(s,1)~='|' then do
- parse var s archiv verzeichnis groesse rest
- alter=substr(s,36,3)
- short=substr(s,40)
- say '<TR>'
- say '<TD><a href="'amineturl'/'verzeichnis'/'archiv'">'
- say archiv'</a></TD>'
- say '<TD align=right><a href="'amineturl'/'verzeichnis'/">'verzeichnis'</TD></a>'
- say '<TD align=right>'groesse'</TD>'
- say '<TD align=right>'alter'</TD>'
- say '<TD><a href="'amineturl'/'verzeichnis'/'left(archiv,length(archiv)-4)'.readme">'
- say short'</a></TD>'
- say '</TR>'
- end
- end
- call close(1)
- address command 'run >nil: delete T:find.'args
- say '</table>'
- end
- end
- return
-
- cdname:
- parse var file cddev':'rest
- if exists(cddev||':') then do
- address command 'c:info 'cddev': >t:cddev.temp'
- if open(cd,'T:cddev.temp') then do
- do while ~eof(cd)
- c=readln(cd)
- if index(c,'[Mounted]')~=0 then parse var c cdname' [Mounted]'
- end
- end
- call close(cd)
- address command 'run >nil: delete T:cddev.temp'
- end
-
- hex2str: procedure
- parse arg a
- b = '%'
- d = index(a,b)
- do while d ~= 0
- a = insert(x2c(substr(a,d+1,2)),delstr(a,d,3),d-1)
- d = index(a,b)
- end
- return a
-